package com.yckj.activechicken.process;

import com.yckj.activechicken.common.utils.StringUtils;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * Title:com.yckj.activechicken.process
 * </p>
 * <p/>
 * <p>
 * Description: 描述【请求流程审批测试控制器】
 * </p>
 * <p/>
 * <p>
 * Copyright: Copyright (c) 2019
 * </p>
 * <p/>
 * <p>
 * Company: 英才汇硕信息技术有限公司
 * </p>
 *
 * @author zhoujy
 * @version 1.0
 * @created 2020/5/24 10:12
 */
@RestController
@RequestMapping("/leava")
public class ProcessTestController {
    private Logger logger = LoggerFactory.getLogger(ProcessTestController.class);

    @Autowired
    private RuntimeService runtimeService;

    @Autowired
    private TaskService taskService;

    /**
     * 启动流程，创建本次流程任务的实例
     */
    @RequestMapping("/startProcess")
    public void startProcess() {
        //创建流程变量
        Map<String, Object> variables = new HashMap<>(1);
        variables.put("deptUser", "部门领导1");

        //通过流程定义的key启动流程，每启动一次都会创建一个流程实例，这里还传入了第一个Task所需的执行人变量
        ProcessInstance leaveProcess1 = runtimeService
                .startProcessInstanceByKey("LeaveProcess1", variables);

        logger.info("流程实例id：" + leaveProcess1.getId());
        logger.info("流程定义id：" + leaveProcess1.getProcessDefinitionId());
    }

    /**
     * 查询代办任务
     */
    @RequestMapping("/queryTaskList")
    public void queryTaskList() {
        String user = "部门领导1";
        List<Task> taskList = taskService.createTaskQuery().taskCandidateOrAssigned(user).list();
        if (StringUtils.isNotEmpty(taskList)) {
            for (Task task : taskList) {
                logger.info("任务id：" + task.getId());
                logger.info("任务名称：" + task.getName());
                logger.info("任务创建时间：" + task.getCreateTime());
                logger.info("任务办理人：" + task.getAssignee());
                logger.info("任务流程实例id：" + task.getProcessInstanceId());
                logger.info("任务执行对象id：" + task.getExecutionId());
            }
        }

    }

    /**
     * 处理指定代办任务
     */
    @RequestMapping("/dealTask")
    public void dealTask() {
        /*
         * 同意请假的方式，设置审批的流程变量，走到人事审批环节，需要设置审批人
         */
        //1、部门领导同意的处理逻辑
       /* Map<String,Object> variables = new HashMap<>();
        variables.put("hrUser","人事领导1");
        variables.put("approval","同意");
        //添加批注，可以不设置taskId,processInstance,message
        taskService.addComment("17506","17501","部门领导审批通过---部门领导1");
        //处理审批，taskId，所需流程变量
        taskService.complete("17506",variables);*/

        //2、人事领导也同意，流程结束
       /* Map<String,Object> variables = new HashMap<>();
        variables.put("approval","同意");
        //添加批注，可以不设置taskId,processInstance,message
        taskService.addComment("20013","17501","人事领导审批通过---人事领导1");
        //处理审批，taskId，所需流程变量
        taskService.complete("20013",variables);*/


       /*
        * 驳回-放弃请假的方式，设置审批的流程变量，走到调整请假单，需要设置修改人
        */
       //1、张三请假条被部门领导驳回
        /*Map<String, Object> variables = new HashMap<>();
        variables.put("applyUser", "张三");
        variables.put("approval", "驳回");
        //添加批注，可以不设置taskId,processInstance,message
        taskService.addComment("15006", "15001", "部门领导审批不通过---部门领导1");
        //处理审批，taskId，所需流程变量
        taskService.complete("15006", variables);*/

        //2、张三放弃请假
        /*Map<String, Object> variables = new HashMap<>();
        variables.put("option", "放弃");
        //添加批注，可以不设置taskId,processInstance,message
        taskService.addComment("25006", "15001", "放弃请假---张三");
        //处理审批，taskId，所需流程变量
        taskService.complete("25006", variables);*/

        /*
        * 驳回-修改请假的方式，设置审批的流程变量，走到调整请假单，需要设置修改人
        */
        //1、张三请假条被部门领导驳回
        /*Map<String, Object> variables = new HashMap<>();
        variables.put("applyUser", "张三");
        variables.put("approval", "驳回");
        //添加批注，可以不设置taskId,processInstance,message
        taskService.addComment("20006", "20001", "部门领导审批不通过---部门领导1");
        //处理审批，taskId，所需流程变量
        taskService.complete("20006", variables);*/

        //2、张三放弃请假
        Map<String, Object> variables = new HashMap<>();
        variables.put("option", "调整");
        variables.put("deptUser", "部门领导1");
        //添加批注，可以不设置taskId,processInstance,message
        taskService.addComment("32506", "20001", "调整请假单---张三");
        //处理审批，taskId，所需流程变量
        taskService.complete("32506", variables);


    }


}
